#pragma once
#include<iostream>
#include<string>
#include<vector>
#include<unordered_map>
namespace ns_index
{
    struct DocInfo
    {
        std::string title; //文档的标题
        std::string content; // 文档对应的去标签之后的内容
        std::string url; //官网文档的url
        u_int64_t doc_id;
    };
    struct InvertedElem
    {
        u_int64_t doc_id;
        std::string words;
        int weight;
    };
    //倒排拉链
    typedef std::vector<InvertedElem> InvertedList;
    class Index{
        private:
            //正派索引的数据结构用数组，数组的下标天然石文档的ID
            std::vector<DocInfo> forward_index;
            //倒排索引一定是一个关键字和一组（个）InvertedElem对应[关键字和倒排拉链的映射关系]
            std::unordered_map<std::string, std::vector<InvertedElem>> inverted_index;
        public:
            Index(){}
            ~Index(){};
        public:
            //根据doc_id找到文档内容
            DocInfo*GetForwardIndex(const u_int64_t doc_id)
            {
                return nullptr;
            }
            //根据关键字string，获取倒排拉链
            InvertedList*GetInvertedListt(const std::string &word)
            {
                return nullptr;
            }
            //根据文档的去标签格式化之后的文档，构建正排和倒排

            //构建索引
            bool BuildIndex(const std::string &input)
            {
                return true;
            }
    };
}
